package lp2.projeto.horario;

/**
 * Representa um mes do ano
 */
public enum Mes {
	JANEIRO(1), FEVEREIRO(2), MARCO(3), ABRIL(4), MAIO(5), JUNHO(6), JULHO(7), AGOSTO(8), SETEMBRO(9), OUTUBRO(10), NOVEMBRO(11), DEZEMBRO(12);
	
	/**
	 * Numero de meses em um ano
	 */
	public static final int NUMERO_DE_MESES = 12;
	
	private final int numero;
	Mes(int numero) {
		this.numero = numero;
	}
	/**
	 * @return o numero associado ao mes
	 */
	public int getNumero() {
		return numero;
	}
	
	private static boolean anoBissexto(int ano) {
		return (ano%400 == 0) || (ano%4 == 0 && ano%100 != 0);
	}
	
	/**
	 * Retorna o numero de dias que um certo mes terah em um determinado ano
	 * @param mes mes, que deve ser o identificador entre 1 e 12
	 * @param ano Argumento usado para determinar se fevereiro terah 28 ou 29 dias
	 * @return o numero de dias
	 * @throws IllegalArgumentException Caso o mes seja invalido
	 */
	public static int getNumDiasNoMes(Mes mes, int ano) throws IllegalArgumentException {
		int numDiasNoMes[] = new int[]{-1, 31, -1, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
		
		if (mes == null)
			throw new IllegalArgumentException("Mes invalido");
		
		 if (mes == Mes.FEVEREIRO) {
			 if (anoBissexto(ano))
				 return 29;
			 return 28;
		 }
		 return numDiasNoMes[mes.getNumero()];
	}
}
